ICMP(Internet Control Message Protocal)位於TCP/IP協定福中的網路層。網際網路常常會出現很多錯誤,就是為了發現和處理這些錯誤的ICMP而生。相較於ARP,ICMP會更為複雜,不過它們的原理是一樣的。
ICMP封包
ICMP提供了大量的封包,這些封包可分為兩類,分別是差錯封包和查詢封包(一個請求一個回應),而和ARP不一樣的是ICMP查詢封包分為四類:回應請求或回應、時間戳記請求或回應、位址隱藏請求或回應、路由器請求或回應,後面三者的成功率很低,我們以第一個為主。
回應請求/回應 封包
Ping指令就是回應請求或回應內的其中一個指令,它可以測本機和目標的連通性,假設我們所在的主機IP為192.168.1.1,通訊目標的主機IP位址為192.168.1.2,想知道目標是否為活躍主機,就要向其發送一個ICMP請求,格式如下:
IP層內容
來源IP位址:192.168.1.1
目的IP位址:192.168.1.2
ICMP層內容
Type:8 (表示請求)
如果192.168.1.2這台主機處於活躍狀態,他收到上方的請求後,會給出一個回應,這個回應的格式如下:
IP層內容
來源IP位址:192.168.1.2
目的IP位址:192.168.1.1
ICMP層內容
Type:0 (表示回應)
也就是說,只要收到了ICMP回應,就可以判斷該主機處在活躍狀態。
撰寫一個活躍主機掃描程式
現在要撰寫一個利用ICMP實現的活躍掃描程式,先檢視參數以及IP位址:
輸入以下指令建立一個ICMP請求資料封包:
這個過程中等待滿久的,跑完後結果如下圖所示:
今天的ICMP介紹到這邊,明天將會介紹以TCP為基礎的活躍主機發現技術。